//package com.cisdi.info.simple.service.permission.impl;
//
//import com.cisdi.info.simple.service.base.BaseService;
////import com.cisdi.info.simple.dao.permission.ModuleDao;
//import com.cisdi.info.simple.entity.permission.Module;
//import com.cisdi.info.simple.entity.permission.ModuleTreeNode;
//import com.cisdi.info.simple.service.permission.ModuleService;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//
//import java.util.*;
//
//@Service
//@Transactional
//public class ModuleServiceBean1 extends BaseService implements ModuleService {
//
//    @Autowired
//    private ModuleDao moduleDao;
//
//    public ModuleTreeNode constructNewTree(Long operatorId, String modelType) {
//        try
//        {
//            List<Module> systemModule = this.moduleDao.findOperableSystemModules(operatorId);
//            if (systemModule == null) {
//                //没有任何权限
//                return null;
//            } else {
//                //
//            }
//
//            ModuleTreeNode node = new ModuleTreeNode();
//            node.setNodes(new ArrayList<ModuleTreeNode>());
//            node.setName("mynode");
//            Iterator<Module> ite = systemModule.iterator();
//            while (ite.hasNext()) {
//                Module system = ite.next();
//                ModuleTreeNode systemNode = new ModuleTreeNode();
//                systemNode.setNodes(new ArrayList<ModuleTreeNode>());
//                systemNode.setText(system.getName());
//                systemNode.setId("系统模块" + system.getEId());
//                systemNode.setName("系统" + system.getCode());
//                systemNode.setGroup("true");
//                systemNode.setRouteParamsObj(system.getRouteParamsObj());
//                Integer level = system.getCode().length()/4;
//                systemNode.setLevel(level.toString());
//                systemNode.setIsExpanded(false);
//                systemNode.setIsSelected(false);
//                node.addNode(systemNode);
//                List<Module> childModules = this.findSystemChildModules(operatorId, system.getEId(), modelType);
//                this.constructTree(systemNode, childModules);
//            }
//            return node;
//        }catch (Exception e){
//            e.printStackTrace();
//        }
//        return  null;
//    }
//
//    private void constructTree(ModuleTreeNode node, List<Module> modules) {
//        if (modules == null || modules.size() == 0) {
//            return;
//        }
//
//        Iterator<Module> ite = modules.iterator();
//        // 循环
//        while (ite.hasNext()) {
//            Module module = ite.next();
//            ModuleTreeNode childNode = new ModuleTreeNode();
//            childNode.setText(module.getName());
//            childNode.setId(module.getEId() + "");
//            childNode.setRouteData(module.getRoute());
//            childNode.setLocation(module.getUrl());
//            childNode.setRouteParamsObj(module.getRouteParamsObj());
//
//            Integer level = module.getCode().length()/4;
//            childNode.setLevel(level.toString());
//            childNode.setIsExpanded(false);
//            childNode.setIsSelected(false);
//
//            List<Module> childModule = module.getChildren();
//
//            String iconClass = module.getIconClass();
//            if (iconClass != null && (!("".equals(iconClass)))) {
//                childNode.setIcon(iconClass);
//            } else {
//                //
//            }
//
//            childNode.setNodes(new ArrayList<ModuleTreeNode>());
//            node.addNode(childNode);
//            this.constructTree(childNode, childModule);
//        }
//
//    }
//
//
//    /**
//     * 查询当前用户的权限下&指定父模块下的模块
//     */
//    private List<Module> findSystemChildModules(Long operatorId, Long systemModuleId,String modelType) throws Exception
//    {
//        try
//        {
//            List<Module> moduleWithLevel = new ArrayList<Module>();
//            // 可操作的最底层模块
//            List<Module> operableModules = this.moduleDao.findOperableSystemChildenModule(operatorId, systemModuleId,modelType);
//
//            //
//            List<String> ModuleCodeHasReSetChilden = new ArrayList<String>();
//            for (Module module : operableModules)
//            {
//                // 对每一个模块进行遍历
//                // 如果该模块的code长度为8，即系统模块下一级则直接加入moduleWithLevel中
//                // 如果该模块的code长度大于8，递归到长度为8为止，并把自己加入父级模块的子模块集合中
//                if (module.getCode().length() == 8)
//                {
//                    if (!moduleWithLevel.contains(module))
//                    {
//                        moduleWithLevel.add(module);
//                    }
//                } else
//                {
//                    Module temp = this.findParent(module,ModuleCodeHasReSetChilden);
//                    if (!moduleWithLevel.contains(temp))
//                    {
//                        moduleWithLevel.add(temp);
//                    }
//                }
//            }
//            List<Module> result = this.listSort(moduleWithLevel);
//            return result;
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//    private List<Module> listSort(List<Module> modules)
//    {
//        List<Module> list = new ArrayList<Module>(modules);
//        ModuleComparator comparator = new ModuleComparator();
//        Collections.sort(list, comparator);
//        List<Module> result = new ArrayList<Module>();
//        for (int i = 0; i < list.size(); i++)
//        {
//            result.add(list.get(i));
//        }
//        return result;
//    }
//
//    private Module findParent(Module module,List<String> ModuleCodeHasReSetChilden)
//    {
//        Module parent = this.moduleDao.findParentModule(module.getParentId());
//        if(ModuleCodeHasReSetChilden.contains(parent.getCode())){
//            //
//        }else{
//            parent.setChildren(null);
//            ModuleCodeHasReSetChilden.add(parent.getCode());
//        }
//
//        parent.getName();
//        List<Module> childens = parent.getChildren();
//        if (childens == null)
//        {
//            childens = new ArrayList<Module>();
//        }
//        childens.add(module);
//        parent.setChildren((List<Module>) this.listSort(childens));
//
//        if (parent.getCode().length() == 8)
//        {
//            return parent;
//        } else
//        {
//            return this.findParent(parent,ModuleCodeHasReSetChilden);
//        }
//    }
//}
